module ActiveRecord #:nodoc:
  module ConnectionAdapters #:nodoc:
    module SchemaStatements #:nodoc:
      def initialize_schema_information_with_plugins
        initialize_schema_information_without_plugins
        
        begin
          execute "CREATE TABLE #{PluginAWeek::PluginMigrations::Migrator.schema_info_table_name} (plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:integer)})"
        rescue ActiveRecord::StatementInvalid
          # Schema has been initialized
        end
      end
      alias_method_chain :initialize_schema_information, :plugins
      
      def dump_schema_information_with_plugins
        schema_information = []
        
        dump = dump_schema_information_without_plugins
        schema_information << dump if dump
        
        begin
          plugins = ActiveRecord::Base.connection.select_all("SELECT * FROM #{PluginAWeek::PluginMigrations::Migrator.schema_info_table_name}")
          plugins.each do |plugin|
            if (version = plugin['version'].to_i) > 0
              plugin_name = ActiveRecord::Base.quote_value(plugin['plugin_name'])
              schema_information << "INSERT INTO #{PluginAWeek::PluginMigrations::Migrator.schema_info_table_name} (plugin_name, version) VALUES (#{plugin_name}, #{version})"
            end
          end
        rescue ActiveRecord::StatementInvalid 
          # No Schema Info
        end
        
        schema_information.join("\n")
      end
      alias_method_chain :dump_schema_information, :plugins
    end
  end
end